Tarea 5#

Trabajaremos con los conjuntos de datos Renewable Energy Consumption and Production de Our World in Data https://ourworldindata.org/renewable-energy). Estos conjuntos de datos están disponibles en el repositorio GitHub del curso, pueden ser importados con las URL: share-of-electricity-production-from-renewable-sources.csv, renewable-energy-consumption-by-country.csv

Su tarea consiste en crear mapas coropléticos de la producción y el consumo totales de energía renovable y el consumo en diferentes países del mundo animados en base a los años de producción/consumo entre (excluyendo) 2007 y 2017.

Punto 1#

Cargar el conjunto de datos de producción de energía renovable.

Ren_Con_Prod_url = 'https://raw.githubusercontent.com/lihkir/Uninorte/main/AppliedStatisticMS/DataVisualizationRPython/Lectures/Python/PythonDataSets/share-of-electricity-production-from-renewable-sources.csv'
import pandas as pd
Ren_Con_Prod_df = pd.read_csv(Ren_Con_Prod_url)
Ren_Con_Prod_df.head()
Country Code Year Renewable electricity (% electricity production)
0 Afghanistan AFG 1990 67.730496
1 Afghanistan AFG 1991 67.980296
2 Afghanistan AFG 1992 67.994310
3 Afghanistan AFG 1993 68.345324
4 Afghanistan AFG 1994 68.704512

El data set Renewable Energy Production presenta las siguientes columnas:

  • Country: País de origen productor de energía renovable.

  • Code: Código del país productor de energía renovable.

  • Year: año de producción de energía renovable.

  • Renewable electricity (% electricity production): porcentaje de producción de energía renovable.

Punto 2#

Ordenar el DataFrame de producción en función de la característica Year.

Ren_Con_Prod_df.sort_values(by=["Year"],inplace=True)
Ren_Con_Prod_df.tail()
Country Code Year Renewable electricity (% electricity production)
2707 Lebanon LBN 2014 1.075089
919 Central African Republic CAF 2014 85.792350
2682 Latvia LVA 2014 54.541918
4743 Switzerland CHE 2014 58.015463
5406 Zimbabwe ZWE 2014 55.622069

Punto 3#

Generar un mapa de coropletas para la producción de energía renovable utilizando el módulo plotly express animado en función del Year.

import plotly.express as px
from IPython.display import IFrame, display, HTML
import chart_studio.plotly as py
from IPython.display import HTML
config={'showLink': False, 'displayModeBar': False}
fig = px.choropleth(Ren_Con_Prod_df, locations="Code", #códigos de país para ubicar los datos en el mapa
                    color = "Renewable electricity (% electricity production)", #columna para determinar el color de cada país
                    hover_name = "Country", #determina qué información se mostrará cuando se pase el cursor sobre un país
                    animation_frame='Year', # visualización animada basados en los valores de la columna 'Year'
                    color_continuous_scale = px.colors.sequential.Plasma) # define la escala de colores que se utilizará para representar los diferentes valores

#fig.show()
HTML(fig.to_html())

En este gráfico interactivo vemos la producción de energía que proviene por país por año de tecnologías renovables.

Punto 4#

Actualice el diseño para incluir un estilo de proyección adecuado y un texto de título, y luego muestre la figura

fig = px.choropleth(Ren_Con_Prod_df, locations="Code", #códigos de país para ubicar los datos en el mapa
                    color = "Renewable electricity (% electricity production)", #columna para determinar el color de cada país
                    hover_name = "Country", #determina qué información se mostrará cuando se pase el cursor sobre un país
                    animation_frame='Year', # visualización animada basados en los valores de la columna 'Year'
                    color_continuous_scale = px.colors.sequential.Plasma) # define la escala de colores que se utilizará para representar los diferentes valores
fig.update_layout(title_text = 'Renewable electricity (% electricity production)', # titulo del gráfico
                  geo = dict(projection={'type':'natural earth'}) # configuración geográfica del mapa
                )
#fig.show()
HTML(fig.to_html())

En este gráfico interactivo podemos rotar como un globo terráqueo real.

Punto 5#

Cargue el conjunto de datos de consumo de energía renovable.

Ren_Con_Cons_url = 'https://raw.githubusercontent.com/lihkir/Uninorte/main/AppliedStatisticMS/DataVisualizationRPython/Lectures/Python/PythonDataSets/renewable-energy-consumption-by-country.csv'
import pandas as pd
Ren_Con_Cons_df = pd.read_csv(Ren_Con_Cons_url)
Ren_Con_Cons_df.head()
Country Code Year Traditional biofuels Other renewables (modern biofuels, geothermal, wave & tidal) Wind Solar PV Hydropower Total
0 Algeria DZA 1965 NaN 0.0 0.0 0.0 NaN 0.0
1 Algeria DZA 1966 NaN 0.0 0.0 0.0 NaN 0.0
2 Algeria DZA 1967 NaN 0.0 0.0 0.0 NaN 0.0
3 Algeria DZA 1968 NaN 0.0 0.0 0.0 NaN 0.0
4 Algeria DZA 1969 NaN 0.0 0.0 0.0 NaN 0.0

El data set Renewable Energy Consumption presenta las siguientes columnas:

  • Country: País de origen productor de energía renovable.

  • Code: Código del país productor de energía renovable.

  • Year: año de producción de energía renovable.

  • Traditional biofuels: conbustibles tradicionales.

  • Other renewables (modern biofuels, geothermal, wave & tidal): Otras energías renovables (biocombustibles modernos, geotérmica, undimotriz y mareomotriz).

  • Wind: viento.

  • Solar PV: Energía solar fotovoltaica.

  • Hydropower: energía hidroeléctrica.

  • Total: Consumo total de energía renovable.

Información del dataset.#

Ren_Con_Cons_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3344 entries, 0 to 3343
Data columns (total 9 columns):
 #   Column                                                        Non-Null Count  Dtype  
---  ------                                                        --------------  -----  
 0   Country                                                       3344 non-null   object 
 1   Code                                                          3344 non-null   object 
 2   Year                                                          3344 non-null   int64  
 3   Traditional biofuels                                          0 non-null      float64
 4   Other renewables (modern biofuels, geothermal, wave & tidal)  3344 non-null   float64
 5   Wind                                                          3344 non-null   float64
 6   Solar PV                                                      3344 non-null   float64
 7   Hydropower                                                    0 non-null      float64
 8   Total                                                         3344 non-null   float64
dtypes: float64(6), int64(1), object(2)
memory usage: 235.2+ KB

El dataset de consumo de energía renovable está compuesto por 9 columnas y 3344 filas, en la cual ‘Country’ y ‘Code’ son categóricas, ‘Year’ tipo entero y ‘Traditiona biofuel’, ‘Other renewables (modern biofuels, geothermal, wave & tidal)’, ‘Wind’, ‘Solar PV’, ‘Hydropower’ y ‘Total’ son de tipo decinal.

Descripción del dataset.#

Ren_Con_Cons_df.describe()
Year Traditional biofuels Other renewables (modern biofuels, geothermal, wave & tidal) Wind Solar PV Hydropower Total
count 3344.000000 0.0 3344.000000 3344.000000 3344.000000 0.0 3344.000000
mean 1991.169856 NaN 2.276702 1.691107 0.351261 NaN 4.319069
std 14.905982 NaN 7.898646 11.395594 2.885864 NaN 19.741046
min 1965.000000 NaN 0.000000 0.000000 0.000000 NaN 0.000000
25% 1978.000000 NaN 0.000000 0.000000 0.000000 NaN 0.000000
50% 1992.000000 NaN 0.024500 0.000000 0.000000 NaN 0.057000
75% 2004.000000 NaN 1.188779 0.012000 0.000832 NaN 1.558361
max 2016.000000 NaN 84.606506 241.000000 66.200000 NaN 380.607427

En la descripción del dataset de consumo de energía renovable encontramos un resumen estadístico de las columnas de tipo número.

Verificar datos nulos.#

Ren_Con_Cons_df.isnull().sum()
Country                                                            0
Code                                                               0
Year                                                               0
Traditional biofuels                                            3344
Other renewables (modern biofuels, geothermal, wave & tidal)       0
Wind                                                               0
Solar PV                                                           0
Hydropower                                                      3344
Total                                                              0
dtype: int64

Se logra identificar un total de 6688 datos entre las columnas ‘Traditional biofuels’ y ‘Hydropower ‘.

Limpieza de datos.#

Teniendo en cuenta que los todos los datos de las columnas ‘Traditional biofuels’ y ‘Hydropower ‘ son nulos se decide a elimar las columnas del estudio.

Ren_Con_Cons_df = Ren_Con_Cons_df.drop(['Traditional biofuels','Hydropower'], axis=1)
Ren_Con_Cons_df.head()
Country Code Year Other renewables (modern biofuels, geothermal, wave & tidal) Wind Solar PV Total
0 Algeria DZA 1965 0.0 0.0 0.0 0.0
1 Algeria DZA 1966 0.0 0.0 0.0 0.0
2 Algeria DZA 1967 0.0 0.0 0.0 0.0
3 Algeria DZA 1968 0.0 0.0 0.0 0.0
4 Algeria DZA 1969 0.0 0.0 0.0 0.0

Muestra de dataset de consumo de energia renovable sin las columnas ‘Traditional biofuels’ y’Hydropower’.

Ren_Con_Cons_df.isnull().sum()
Country                                                         0
Code                                                            0
Year                                                            0
Other renewables (modern biofuels, geothermal, wave & tidal)    0
Wind                                                            0
Solar PV                                                        0
Total                                                           0
dtype: int64

Se verifica que el nuevo dataset no tiene datos faltantes.

Punto 6#

Convierta el DataFrame de consumo a un formato adecuado para su visualización.

Punto 7#

Ordenar el DataFrame de consumo en base a la característica Year.

Ren_Con_Cons_df.sort_values(by=["Year"],inplace=True)
Ren_Con_Cons_df.tail()
Country Code Year Other renewables (modern biofuels, geothermal, wave & tidal) Wind Solar PV Total
947 Finland FIN 2016 11.794548 3.068000 0.013462 14.876009
155 Australia AUS 2016 3.352482 13.190887 7.157880 23.701249
2863 Thailand THA 2016 9.649613 0.465826 2.334719 12.450158
2603 South Korea KOR 2016 12.018676 1.779674 5.236650 19.035000
3343 Vietnam VNM 2016 0.059162 0.241540 0.007170 0.307871

Punto 8#

Generar un mapa coroplético para el consumo de energía renovable utilizando el módulo plotly express animado en función del año.

config={'showLink': False, 'displayModeBar': False}
fig = px.choropleth(Ren_Con_Cons_df, locations="Code", #códigos de país para ubicar los datos en el mapa
                    color = "Total", #columna para determinar el color de cada país
                    hover_name = "Country", #determina qué información se mostrará cuando se pase el cursor sobre un país
                    animation_frame='Year', # visualización animada basados en los valores de la columna 'Year'
                    color_continuous_scale = px.colors.sequential.Plasma) # define la escala de colores que se utilizará para representar los diferentes valores

fig.update_layout(geo=dict(showcountries=True), width=800, height=400) 
HTML(fig.to_html())
#fig.show()

En este gráfico interactivo vemos el consumo total de energía renovable en cada país por año.

Punto 9#

Actualice el diseño para incluir un estilo de proyección adecuado y un texto de título, y luego muestre la figura.

fig = px.scatter_geo(Ren_Con_Cons_df,
                     locations="Code", # Códigos de país para ubicar las burbujas
                     size="Total", # Columna para determinar el tamaño de las burbujas
                     hover_name="Country", # Información mostrada al pasar el cursor sobre una burbuja
                     animation_frame="Year", # Animación basada en la columna 'Year'
                     color="Total", # Columna para determinar el color de las burbujas
                     projection="natural earth", # Tipo de proyección del mapa
                     title='Renewable Electricity (% of Electricity Consumption)', # Título del gráfico
                     color_continuous_scale=px.colors.sequential.Viridis, # Escala de colores 'Viridis'
                     size_max=50 # Aumentar el tamaño máximo de las burbujas
                    )
fig.update_layout(geo=dict(showcountries=True), width=800, height=400) # Tamaño del gráfico

#fig.show()
HTML(fig.to_html())

En este gráfico interactivo podemos rotar como un globo terráqueo real.